#ifndef OMG_TDDS_XTYPES_FWD_HPP_
#define OMG_TDDS_XTYPES_FWD_HPP_

/* Copyright (c) 2009-2010, Real-Time Innovations, Inc.
 * Copyright (c) 2010, Object Management Group, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 * - Redistributions of source code must retain the above copyright notice,
 *   this list of conditions and the following disclaimer.
 * - Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 * - Neither the names of the above copyright holders nor the names of their
 *   contributors may be used to endorse or promote products derived from
 *   this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL A COPYRIGHT HOLDER OR CONTRIBUTOR BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */


#ifdef OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT

namespace tdds {
    namespace type {
        // --- Built-in Types: --- //
        namespace builtin {
            // --- Keyed bytes: --- //
            template <typename DELEGATE>
            class OMG_DDS_API KeyedBytes;

            // --- Keyed string: --- //
            template <typename DELEGATE>
            class OMG_DDS_API KeyedString;
        }

        // --- Dynamic Language Binding: --- //
        namespace dynamic {
            // --- Annotation descriptor: --- //
            template <typename DELEGATE>
            class OMG_DDS_API AnnotationDescriptor;

            // --- Dynamic data: --- //
            template <typename DELEGATE>
            class OMG_DDS_API DynamicData;

            // --- Dynamic data factory: --- //
            template <typename DELEGATE>
            class OMG_DDS_API DynamicDataFactory;
            
            // --- Dynamic type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API DynamicType;

            // --- Dynamic type factory: --- //
            template <typename DELEGATE>
            class OMG_DDS_API DynamicTypeFactory;
            
            // --- Dynamic type factory: --- //
            template <typename DELEGATE>
            class OMG_DDS_API DynamicTypeMember;

            // --- Member descriptor: --- //
            template <typename DELEGATE>
            class OMG_DDS_API MemberDescriptor;
            
            // --- Type descriptor: --- //
            template <typename DELEGATE>
            class OMG_DDS_API TypeDescriptor;
        }

        // --- Type Object Type Representation: --- //
        namespace typeobject {
            // --- Alias type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API AliasType;

            // --- Annotation member value: --- //
            template <typename DELEGATE>
            class OMG_DDS_API AnnotationMember;

            // --- Annotation member value: --- //
            template <typename DELEGATE>
            class OMG_DDS_API AnnotationMemberValue;

            // --- Annotation type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API AnnotationType;

            // --- Annotation usage: --- //
            template <typename DELEGATE>
            class OMG_DDS_API AnnotationUsage;

            // --- Annotation usage member: --- //
            template <typename DELEGATE>
            class OMG_DDS_API AnnotationUsageMember;

            // --- Array type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API ArrayType;

            // --- Bit: --- //
            template <typename DELEGATE>
            class OMG_DDS_API Bit;

            // --- Bit set type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API BitSetType;

            // --- Collection type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API CollectionType;

            // --- Enumerated constant: --- //
            template <typename DELEGATE>
            class OMG_DDS_API EnumeratedConstant;

            // --- Enumeration type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API EnumerationType;

            // --- Map type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API MapType;

            // --- Member: --- //
            template <typename DELEGATE>
            class OMG_DDS_API Member;
            
            // --- Member property: --- //
            template <typename DELEGATE>
            class OMG_DDS_API MemberProperty;

            // --- Module: --- //
            template <typename DELEGATE>
            class OMG_DDS_API Module;

            // --- Sequence type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API SequenceType;

            // --- String type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API StringType;

            // --- Structure member: --- //
            template <typename DELEGATE>
            class OMG_DDS_API StructureMember;

            // --- Structure type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API StructureType;

            // --- Type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API Type;

            // --- Type library: --- //
            template <typename DELEGATE>
            class OMG_DDS_API TypeLibrary;

            // --- Type library element: --- //
            template <typename DELEGATE>
            class OMG_DDS_API TypeLibraryElement;

            // --- Type object: --- //
            template <typename DELEGATE>
            class OMG_DDS_API TypeObject;

            // --- Type property: --- //
            template <typename DELEGATE>
            class OMG_DDS_API TypeProperty;

            // --- Union member: --- //
            template <typename DELEGATE>
            class OMG_DDS_API UnionMember;
            
            // --- Union type: --- //
            template <typename DELEGATE>
            class OMG_DDS_API UnionType;
        }
    }
}

#endif  // OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT


#endif // !defined(OMG_TDDS_XTYPES_FWD_HPP_)
